/**
 *
 * 处理两处数据，
 * 第一处是点击新增按钮，填写完唯一性验证信息后返回的数据
 * 第二处是点击修改，返回的页面数据内容
 *
 * */

import renderRowOperator from './renderRowOperator';

const ignoreList = ['formrelation', 'code', 'gridrelation', 'ncc600704list', 'validateFlag'];

const formList = ['bd_psndoc', 'hi_psnorg_h', 'hi_psnjob_h'];

// res是获取修改页面数据的返回结果
export default function (cb) {

    const {
        modifyData: res
    } = this.state;

    let meta = this.props.meta.getMeta();
    let allArea = res.data.allArea;
    let photoRequired = false;

    // 解决gridrelation报错的问题
    Object.keys(allArea).forEach((key) => {
        if (ignoreList.indexOf(key) < 0) {
            meta[key] = allArea[key];
            meta['gridrelation'][key] = {
                destBrowseAreaCode: null,
                destEditAreaCode: null,
                srcAreaCode: key,
                tabRelation: [key]
            };
        }
    });

    // 给子表每一行添加操作按钮
    let template = renderRowOperator.call(this, meta, res.data.areaCodeList);

    // 隐藏照片
    template['bd_psndoc'].items.forEach((item) => {
        if(item.attrcode === 'photo') {
            item.visible = false;
            photoRequired = item.required;
        }
    });
    /**
     * 这里这么做的目的
     * 首先说原因，因为form里的某些参照的查询条件是动态的
     * 这就造成了查询条件查回来的时候，参照拿着默认的queryCondition去请求了
     * 于是在这里设定了queryCondition为一个对象，利用了对象存储的是指针的原理
     * 当请求回来的时候利用这个指针修改queryCondition数据，
     * 这样就会让参照拿到的是动态的请求条件
     */
    formList.map((formKey) => {
        template[formKey].items.forEach((item) => {
            item['queryCondition'] = item.queryCondition || {};

            if (item.itemtype === 'datetimepicker') {
                item.disabled = false;
            }
        });
    });


    // 重新设置模版，并且将数据和照片存储到state里
    this.props.meta.setMeta(template, () => {
        this.setState({
            addPageTemplate: res.data,
            imageData: res.data.image,
            photoRequired: photoRequired
        }, () => {
            cb && cb.call(this);
        });
    });
}